package org.summer.lawyer.domain.bo.paytransfer;

import io.github.linpeilie.annotations.AutoMapper;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.summer.common.mybatis.core.domain.BaseEntitySearch;
import org.summer.lawyer.domain.PayTransfer;

import java.io.Serial;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * 转账单业务对象 pay_transfer
 *
 * @author summer
 * @date 2024-06-28
 */
@Schema(title = "转账单视图对象 pay_transfer", description = "转账单视图对象 pay_transfer")
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PayTransfer.class, reverseConvertGenerate = false)
public class PayTransferBo extends BaseEntitySearch {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @Schema(title = "id", type = "Long", description = "主键ID")
    //@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
    private Long id;

    /**
     * 转账订单ID
     */
    @Schema(title = "transferNo", type = "String", description = "转账订单ID")
    //@NotBlank(message = "转账订单ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private String transferNo;

    /**
     * 转账批次单号
     */
    @Schema(title = "transferBatchNo", type = "String", description = "转账批次单号")
    //@NotBlank(message = "转账批次单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String transferBatchNo;

    /**
     * 支付应用ID
     */
    @Schema(title = "appId", type = "Long", description = "支付应用ID")
    //@NotNull(message = "支付应用ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long appId;

    /**
     * 微信appid
     */
    @Schema(title = "wxAppId", type = "String", description = "微信appid")
    //@NotBlank(message = "微信appid不能为空", groups = { AddGroup.class, EditGroup.class })
    private String wxAppId;

    /**
     * 商户号
     */
    @Schema(title = "mchNo", type = "String", description = "商户号")
    //@NotBlank(message = "商户号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String mchNo;

    /**
     * 商户名称
     */
    @Schema(title = "mchName", type = "String", description = "商户名称")
    //@NotBlank(message = "商户名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String mchName;

    /**
     * 通道ID
     */
    @Schema(title = "channelId", type = "Long", description = "通道ID")
    //@NotNull(message = "通道ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long channelId;

    /**
     * 通道编码
     */
    @Schema(title = "channelCode", type = "String", description = "通道编码")
    //@NotBlank(message = "通道编码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String channelCode;

    /**
     * 提现记录编号
     */
    @Schema(title = "withdrawNumber", type = "String", description = "提现记录编号")
    //@NotBlank(message = "提现记录编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String withdrawNumber;

    /**
     * 用户ID
     */
    @Schema(title = "userId", type = "Long", description = "用户ID")
    //@NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long userId;

    /**
     * 用户openId
     */
    @Schema(title = "openId", type = "String", description = "用户openId")
    //@NotBlank(message = "用户openId不能为空", groups = { AddGroup.class, EditGroup.class })
    private String openId;

    /**
     * 收款方姓名
     */
    @Schema(title = "userName", type = "String", description = "收款方姓名")
    //@NotBlank(message = "收款方姓名不能为空", groups = { AddGroup.class, EditGroup.class })
    private String userName;

    /**
     * 转账说明
     */
    @Schema(title = "transferRemark", type = "String", description = "转账说明")
    //@NotBlank(message = "转账说明不能为空", groups = { AddGroup.class, EditGroup.class })
    private String transferRemark;

    /**
     * 第三方交易号
     */
    @Schema(title = "tradeNo", type = "String", description = "第三方交易号")
    //@NotBlank(message = "第三方交易号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String tradeNo;

    /**
     * 付款方式
     */
    @Schema(title = "payWay", type = "String", description = "付款方式")
    //@NotBlank(message = "付款方式不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payWay;

    /**
     * 转账状态
     */
    @Schema(title = "transferStatus", type = "Integer", description = "转账状态")
    //@NotNull(message = "转账状态不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer transferStatus;

    /**
     * 转账时间
     */
    @Schema(title = "transferTime", type = "Date", description = "转账时间")
    //@NotNull(message = "转账时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date transferTime;

    /**
     * 回调状态（1成功，2失败）
     */
    @Schema(title = "returnStatus", type = "Integer", description = "回调状态（1成功，2失败）")
    //@NotNull(message = "回调状态（1成功，2失败）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer returnStatus;

    /**
     * 支付金额（单位分）
     */
    @Schema(title = "amount", type = "Long", description = "支付金额（单位分）")
    //@NotNull(message = "支付金额（单位分）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long amount;

    /**
     * 第三方返回的错误码
     */
    @Schema(title = "resultCode", type = "String", description = "第三方返回的错误码")
    //@NotBlank(message = "第三方返回的错误码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String resultCode;

    /**
     * 第三方返回的错误信息
     */
    @Schema(title = "resultMsg", type = "String", description = "第三方返回的错误信息")
    //@NotBlank(message = "第三方返回的错误信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private String resultMsg;

    /**
     * 提交的信息
     */
    @Schema(title = "postJson", type = "String", description = "提交的信息")
    //@NotBlank(message = "提交的信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private String postJson;

    /**
     * 回调的信息
     */
    @Schema(title = "returnJson", type = "String", description = "回调的信息")
    //@NotBlank(message = "回调的信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private String returnJson;

    /**
     * 回调时间
     */
    @Schema(title = "returnTime", type = "Date", description = "回调时间")
    //@NotNull(message = "回调时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date returnTime;

    /**
     * 回调地址
     */
    @Schema(title = "notifyUrl", type = "String", description = "回调地址")
    //@NotBlank(message = "回调地址不能为空", groups = { AddGroup.class, EditGroup.class })
    private String notifyUrl;

    /**
     * 成功时间
     */
    @Schema(title = "successTime", type = "Date", description = "成功时间")
    //@NotNull(message = "成功时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private LocalDateTime successTime;


}
